package day5;

import java.lang.reflect.Field;

public class Demo333 {
    public static void copyProperties(Object source, Object target) throws IllegalAccessException {
        // 获取源对象和目标对象的Class对象
        Class<?> sourceClass = source.getClass();
        Class<?> targetClass = target.getClass();

        // 遍历源对象的所有属性
        for (Field sourceField : sourceClass.getDeclaredFields()) {
            String fieldName = sourceField.getName();
            sourceField.setAccessible(true); // 允许访问私有属性

            // 获取源属性值
            Object value = sourceField.get(source);
            if (value == null) continue; // 跳过null值
            try {
                // 在目标对象中查找同名属性
                Field targetField = targetClass.getDeclaredField(fieldName);
                targetField.setAccessible(true); // 允许访问私有属性
                // 检查属性类型是否兼容（简化处理，实际需考虑类型转换）
                if (targetField.getType().isAssignableFrom(sourceField.getType())) {
                    targetField.set(target, value); // 复制值
                }
            } catch (NoSuchFieldException e) {
                // 目标对象无同名属性，跳过
            }
        }
    }

    // 示例用法
    public static void main(String[] args) {
        // 源对象和目标对象示例
        class User {
            private String name;
            private int age;
            // 省略getter/setter
        }

        User source = new User();
        source.name = "Alice";
        source.age = 25;

        User target = new User();
        try {
            copyProperties(source, target);
            // 验证：target.name和target.age应被赋值
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
